var express = require('express');
var router = express.Router();

var { uid } = require("uid");

var { getData, setData } = require("../tool/connect");
var { validateField, validateTokenCookie, validateTokenHeader } = require("../middleware/validate");
var { verifyToken } = require("../tool/token.js");

/* GET home page. */
router.get('/', function (req, res, next) {
    res.send("/car")
});

// 加入购物车需要提供哪些信息?
// 账号信息(谁)   => 当前登录的用户
// 商品信息(买了什么东西)  => 存商品id(可以通过商品id在商品列表找到对应信息)
// 数量(买了几件)   => 数量

// 路由地址: /car/add
// 请求方式: post
// 携带参数:  user  gid  buyNum
router.post('/add', validateField("user", "post"), validateField("gid", "post"), validateField("buyNum", "post"), validateTokenHeader, function (req, res, next) {

    console.log(req.headers); // 请求头
    // // console.log(req.headers.cookie); // 请求头=>cookie => 自己解析

    // // 使用cookie-parser插件 解析后
    // console.log(req.cookies);

    // var { token } = req.cookies;

    // if (verifyToken(token)) {

    // } else {
    //     res.send({
    //         code: 100,
    //         message: "token过期或失效",
    //     })
    // }






    // res.send("/car/add");
    var data = req.body;
    // console.log(data);
    var { user, gid, buyNum } = data;

    getData("car").then(list => {
        // console.log("list", list);

        // list.push(data); // 向数组中追加数据 (无脑加)  

        // 加入购物车之前需要判断 当前用户 是否购买过 当前商品
        // (1) 没买过 => 直接加入购物车
        // (2) 买过  =>  数量 累加

        // 新增信息时数据缺少唯一索引(cid) => 对应cid 增删改查数据

        var info = list.find(v => v.user == user && v.gid == gid); // 当前用户 是否购买过 当前商品
        if (info) {  // 买过
            info.buyNum = Number(info.buyNum) + Number(buyNum)
        } else { // 没买过  => 新增

            var cid = uid(16);
            // list.push({ cid: Date.now(), ...data })
            list.push({ cid: cid, ...data })


        }


        setData("car", JSON.stringify(list)).then(() => {
            res.send({
                code: 200,
                message: "加入成功",
            })
        }).catch(err => {
            res.send({
                code: 500,
                message: err.message
            })
        })


    }).catch(err => {
        res.send({
            code: 500,
            message: err.message
        })
    })




});


// 对应用户名查询用户购买的所有商品
// 路由地址: /car/search  
// 请求方式: get
// 携带参数:  user 

router.get("/search", validateField("user", "get"), async function (req, res) {
    var { user } = req.query;
    try {
        var list = await getData("car");  // 购物车
        var goodsList = await getData("goods");  // 商品

        // 对应用户名查找用户购买的商品 (没有商品信息 => 有gid)
        var arr = list.filter(v => v.user == user);

        // 对应gid查找商品信息
        arr = arr.map(v => {  // v => 用户购买的每一件商品(gid)
            var goods = goodsList.find(item => item.id == v.gid);
            var { id, ...info } = goods;  // Rest参数 (除id以外的所有数据放到info中)
            return { ...v, ...info };
        })

        res.send({
            code: 200,
            message: "ok",
            list: arr,
        })

    } catch (err) {
        res.send({
            code: 500,
            message: err.message
        })
    }


});



// 对应cid 更新数量 ( +   -)
// 路由地址: /car/update 
// 请求方式: get
// 携带参数:  cid  buyNum 

router.get("/update", validateField("cid"), validateField("buyNum"), async function (req, res) {
    var { cid, buyNum } = req.query;
    try {
        var list = await getData("car");  // 购物车 (JSON字符串转数组)

        // 对应cid查找购物车信息 (对象 => 引用类型)
        var curItem = list.find(v => v.cid == cid);

        // 更新数量 (修改curItem  => list也会改变)
        curItem.buyNum = buyNum;

        await setData("car", JSON.stringify(list));

        res.send({
            code: 200,
            message: "数量更新成功",
        })

    } catch (err) {
        res.send({
            code: 500,
            message: err.message
        })
    }

})




// 对应cid 删除商品
// 路由地址: /car/delete 
// 请求方式: get
// 携带参数:  cid (一个或多个多个用逗号分隔)
// 实例: /car/detete?cid=959ae9bde4961840,959ae9bde4961841

router.get("/delete", validateField("cid"), async function (req, res) {
    var { cid } = req.query;
    var cidList = cid.split(","); // ["959ae9bde4961840", "959ae9bde4961841"]
    try {
        var list = await getData("car");  // 购物车 (JSON字符串转数组)

        for (var i = 0; i < list.length; i++) {
            var item = list[i]; // 购物车中的每件商品
            if (cidList.includes(item.cid)) {
                list.splice(i, 1);
                i--;
            }
        }

        await setData("car", JSON.stringify(list));

        res.send({
            code: 200,
            message: "删除成功",
        })

    } catch (err) {
        res.send({
            code: 500,
            message: err.message
        })
    }

})






module.exports = router;
